#!/usr/bin/python
# -*- coding: utf-8 -*-

##
 # Copyright 2009 Caio Souza
 # This file is part of Rpyg.
 #
 # Rpyg is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
 # the Free Software Foundation, either version 3 of the License, or
 # (at your option) any later version.
 #
 # Rpyg is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 # GNU General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
 # along with Rpyg. If not, see <http://www.gnu.org/licenses/>.
 ##

'''Módulo dos estados dos personagens.'''

DO_NOTHING, MOVE_TO, MOVE_KEY, LOOK_AT = range(0, 4)
'''Constantes de definição do tipo do estado.'''

class State:
    '''
    Cria um estado com o tipo e campos passados.
    
    As interfaces de controle do personagem, pelo teclado ou rede,
    interagem com o objetos controlados através de intâncias dessa classe. 
    '''

    action_labels = {}
    '''Legenda dos tipos dos estados, usadas na representacao em string da classe.'''

    action_labels[MOVE_TO] = 'Move to'
    action_labels[MOVE_KEY] = 'Move key'
    action_labels[DO_NOTHING] = 'Do nothing'
    action_labels[LOOK_AT] = 'Look at'

    def __init__(self, type, counter = -1, **k_args):
        '''Cria um novo estado.
        
        Cria uma nova ação do tipo 'type', cujo valor é uma das contantes definidas,
        nesse módulo e com os atributos passados por 'k_args'.
        '''

        self.type = type
        '''Tipo do estado.'''
        
        self.counter = counter
        '''Contador decremental de usos do estado.
        É manipulado pela classe que possui esse objeto, se necessário.'''

        for k, v, in k_args.items():
            self.__dict__[k] = v

    def __str__(self):
        '''Representação do objeto como string.'''

        label = self.action_labels[self.type]
        return '<rpyg.State %s: %s>' % (label, str(self.__dict__))
